/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package AplicacionMVC;
import funciones.Historial;
import funciones.Curas;
import funciones.Pruebas;
import funciones.Diagnosticos;
import funciones.Discapacidades;
import funciones.Medicamentos;
import funciones.Otros;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import oracle.net.aso.g;

/**
 *
 * @author inftel
 */
public class ModeloHistorial {
    private  BaseDatos bd;
    ModeloHistorial() throws SQLException{
        bd = new BaseDatos();        
    }
    public void conectar() throws SQLException{
        bd.conectar();
    }
    public void conectarScrolable() throws SQLException{
        bd.conectar(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    }
    public void desconectar() throws SQLException{
        bd.desconectar();
    }
    public Map<Integer,Historial> getAlergias(String dni,String nss) throws SQLException{
        String nombre;
        int idalergia;
        
        
        //ResultSet resultado  = bd.consultar("SELECT IDALERGIA,NOMBRE from alergias where idalergia in(select idalergia from pacientes_alergias WHERE dni='"+dni+"' and nss='"+nss+"');");
        ResultSet resultado  = bd.consultar("SELECT IDALERGIA,NOMBRE from alergias where idalergia in(select idalergia from pacientes_alergias WHERE dni='"+dni+"' and nss='"+nss+"')");
        
        

        int i=0;
        Map<Integer,Historial> historia = new HashMap<Integer, Historial>();
        while(resultado.next()){
            idalergia = resultado.getInt("IDALERGIA");
            nombre = resultado.getString("NOMBRE");
            historia.put(new Integer(i), new Historial(idalergia,nombre));
            i++;
        }
        return historia;
    }
     public Map<Integer,Discapacidades> getDiscapacidades(String dni,String nss) throws SQLException{
        String nombre;
        int iddiscapacidad;
        
        //ResultSet resultado  = bd.consultar("SELECT IDALERGIA,NOMBRE from alergias where idalergia in(select idalergia from pacientes_alergias WHERE dni='"+dni+"' and nss='"+nss+"');");
        ResultSet resultado  = bd.consultar("SELECT IDDISCAPACIDAD,NOMBRE from discapacidades where iddiscapacidad in(select iddiscapacidad from pacientes_discapacidades WHERE dni='"+dni+"' and nss='"+nss+"')");
        
        int i=0;
        Map<Integer,Discapacidades> disca = new HashMap<Integer, Discapacidades>();
        while(resultado.next()){
            iddiscapacidad = resultado.getInt("IDDISCAPACIDAD");
            nombre = resultado.getString("NOMBRE");
            disca.put(new Integer(i), new Discapacidades(iddiscapacidad,nombre));
            i++;
        }
        return disca;
    }
    public ArrayList<Curas> getCuras(String dni,String nss) throws SQLException{
        ResultSet resultado  = bd.consultar("SELECT (select nombre from medicos where medicos.idmedico=curas.idmedico) NOMBREMEDICO,TO_CHAR(CURAS.FECHA,'dd/mm/yy') FECHA,CURA,INICIO,FIN,FRECUENCIA,CANCELADA,MOTIVOCANCELACION from CURAS WHERE dni='"+dni+"' and nss='"+nss+"'");
        ArrayList<Curas> lista = new ArrayList<Curas>();
        while(resultado.next()){
            Curas cur = new Curas();
            cur.setNombreMedico(resultado.getString("NOMBREMEDICO"));
            cur.setFecha(resultado.getString("FECHA"));
            cur.setCura(resultado.getString("CURA"));
            cur.setInicio(resultado.getString("INICIO"));
            cur.setFin(resultado.getString("FIN"));
            cur.setFrecuencia(resultado.getString("FRECUENCIA"));
            cur.setCancelada(resultado.getString("CANCELADA"));
            cur.setMotivoCancelacion(resultado.getString("MOTIVOCANCELACION"));
            lista.add(cur);
        }
        return lista;
    }
    public ArrayList<Curas> getDiagnosticosCuras(String dni,String nss,String fecha) throws SQLException{
        ResultSet resultado  = bd.consultar("SELECT (select nombre from medicos where medicos.idmedico=curas.idmedico) NOMBREMEDICO,TO_CHAR(CURAS.FECHA,'dd/mm/yy') FECHA,CURA,INICIO,FIN,FRECUENCIA,CANCELADA,MOTIVOCANCELACION from CURAS WHERE dni='"+dni+"' and nss='"+nss+"' and fecha=to_date('"+fecha+"','dd/mm/yy')");
        ArrayList<Curas> lista = new ArrayList<Curas>();
        while(resultado.next()){
            Curas cura = new Curas();
            cura.setNombreMedico(resultado.getString("NOMBREMEDICO"));
            cura.setFecha(resultado.getString("FECHA"));
            cura.setCura(resultado.getString("CURA"));
            cura.setInicio(resultado.getString("INICIO"));
            cura.setFin(resultado.getString("FIN"));
            cura.setFrecuencia(resultado.getString("FRECUENCIA"));
            cura.setCancelada(resultado.getString("CANCELADA"));
            cura.setMotivoCancelacion(resultado.getString("MOTIVOCANCELACION"));
            lista.add(cura);
        }
        return lista;
    }
    public ArrayList<Pruebas> getPruebas(String DNI, String NSS) throws SQLException{
       ResultSet resultado  = bd.consultar("select (select nombre from medicos where medicos.idmedico=pruebaspacientes.idmedico) nombremedico,nombre, prioridad, fechasolicitud, fecharealizada, fechaentregada, comentario from pruebaspacientes where dni='"+DNI+"' and nss='"+NSS+"'");
       ArrayList<Pruebas> lista = new ArrayList<Pruebas>();
        while(resultado.next()){
            Pruebas pru = new Pruebas();
            pru.setNombreMedico(resultado.getString("nombremedico"));
            pru.setNombre(resultado.getString("nombre"));
            pru.setPrioridad(resultado.getInt("prioridad"));
            pru.setFechaSolicitud(resultado.getString("fechasolicitud"));
            pru.setFechaRealizada(resultado.getString("fecharealizada"));
            pru.setFechaEntregada(resultado.getString("fechaentregada"));
            pru.setComentario(resultado.getString("comentario"));
            lista.add(pru);
        }
        return lista;
    }
    public ArrayList<Diagnosticos> getDiagnosticos(String DNI, String NSS) throws SQLException{
       ResultSet resultado  = bd.consultar("SELECT (select nombre from medicos where medicos.idmedico=diagnostico.idmedico) nombremedico,TO_CHAR(diagnostico.fecha,'dd/mm/yy') fecha,diagnostico from diagnostico where dni='"+DNI+"' and nss='"+NSS+"'");
       ArrayList<Diagnosticos> lista = new ArrayList<Diagnosticos>();
        while(resultado.next()){
            Diagnosticos dia = new Diagnosticos();
            dia.setNombreMedico(resultado.getString("nombremedico"));
            dia.setFecha(resultado.getString("fecha"));
            dia.setDiagnostico(resultado.getString("diagnostico"));            
            lista.add(dia);
        }
        return lista;
    }
    public ArrayList<Medicamentos> getMedicamentos(String DNI, String NSS) throws SQLException{
       ResultSet resultado  = bd.consultar("select distinct(m1.idmedicamento),nombre, marca, precio, (select nombre from medicos where medicos.idmedico=m2.idmedico) nombremedico, m2.cancelada, TO_CHAR(m2.fecha,'dd/mm/yy') fecha, m2.fin, m2.frecuencia, m2.inicio, m2.motivocancelacion from medicamento m1, medicinas m2 where m1.idmedicamento=m2.idmedicamento and dni='"+DNI+"' and nss='"+NSS+"'");   
       ArrayList<Medicamentos> lista = new ArrayList<Medicamentos>();
        while(resultado.next()){
            Medicamentos med = new Medicamentos();
            med.setNombreMedico(resultado.getString("nombremedico"));
            med.setCancelada(resultado.getInt("cancelada"));
            med.setFecha(resultado.getString("fecha"));            
            med.setFin(resultado.getString("fin"));
            med.setFrecuencia(resultado.getFloat("frecuencia"));
            med.setInicio(resultado.getString("inicio"));
            med.setMarca(resultado.getString("marca"));
            med.setMotivoCancelacion(resultado.getString("motivocancelacion"));
            med.setNombre(resultado.getString("nombre"));
            med.setPrecio(resultado.getString("precio"));
            lista.add(med);
        }
        return lista;
    }
    public ArrayList<Medicamentos> getDiagnosticosMedicamentos(String DNI, String NSS, String FECHA) throws SQLException{
       ResultSet resultado  = bd.consultar("select distinct(m1.idmedicamento),nombre, marca, precio, (select nombre from medicos where medicos.idmedico=m2.idmedico) nombremedico, m2.cancelada, TO_CHAR(m2.fecha,'dd/mm/yy') fecha, m2.fin, m2.frecuencia, m2.inicio, m2.motivocancelacion from medicamento m1, medicinas m2 where m1.idmedicamento=m2.idmedicamento and dni='"+DNI+"' and nss='"+NSS+"' and fecha=to_date('"+FECHA+"','dd/mm/yy')");   
       ArrayList<Medicamentos> lista = new ArrayList<Medicamentos>();
        while(resultado.next()){
            Medicamentos med = new Medicamentos();
            med.setNombreMedico(resultado.getString("nombremedico"));
            med.setCancelada(resultado.getInt("cancelada"));
            med.setFecha(resultado.getString("fecha"));            
            med.setFin(resultado.getString("fin"));
            med.setFrecuencia(resultado.getFloat("frecuencia"));
            med.setInicio(resultado.getString("inicio"));
            med.setMarca(resultado.getString("marca"));
            med.setMotivoCancelacion(resultado.getString("motivocancelacion"));
            med.setNombre(resultado.getString("nombre"));
            med.setPrecio(resultado.getString("precio"));
            lista.add(med);
        }
        return lista;
    }
    public ArrayList<Otros> getOtros(String DNI, String NSS) throws SQLException{
       ResultSet resultado  = bd.consultar("select (select nombre from medicos where medicos.idmedico=otros.idmedico) nombremedico, cancelada,TO_CHAR(otros.FECHA,'dd/mm/yy') fecha,fin, frecuencia, inicio, motivocancelacion from otros  where dni='"+DNI+"' and nss='"+NSS+"'");
       ArrayList<Otros> lista = new ArrayList<Otros>();
        while(resultado.next()){
            Otros otr = new Otros();
            otr.setNombreMedico(resultado.getString("nombremedico"));
            otr.setCancelada(resultado.getInt("cancelada"));
            otr.setFecha(resultado.getString("fecha"));            
            otr.setFin(resultado.getString("fin"));
            otr.setFrecuencia(resultado.getFloat("frecuencia"));
            otr.setInicio(resultado.getString("inicio"));
            otr.setMotivoCancelacion(resultado.getString("motivocancelacion"));
            lista.add(otr);
        }
        return lista;
    }
    public ArrayList<Otros> getDiagnosticosOtros(String DNI, String NSS, String FECHA) throws SQLException{
       ResultSet resultado  = bd.consultar("select (select nombre from medicos where medicos.idmedico=otros.idmedico) nombremedico, cancelada,TO_CHAR(otros.FECHA,'dd/mm/yy') fecha,fin, frecuencia, inicio, motivocancelacion from otros  where dni='"+DNI+"' and nss='"+NSS+"' and fecha=to_date('"+FECHA+"','dd/mm/yy')");
       ArrayList<Otros> lista = new ArrayList<Otros>();
        while(resultado.next()){
            Otros otr = new Otros();
            otr.setNombreMedico(resultado.getString("nombremedico"));
            otr.setCancelada(resultado.getInt("cancelada"));
            otr.setFecha(resultado.getString("fecha"));            
            otr.setFin(resultado.getString("fin"));
            otr.setFrecuencia(resultado.getFloat("frecuencia"));
            otr.setInicio(resultado.getString("inicio"));
            otr.setMotivoCancelacion(resultado.getString("motivocancelacion"));
            lista.add(otr);
        }
        return lista;
    }
}
